import random
class SqList:		#定义线性表的类，类名：SqList  Sequence List
    def __init__(self): #必须包含一个名为 self 的参数，且必须作为第一个参数
						#self代表类的实例，而非类。
        self.initcapacity=5
        self.capacity=self.initcapacity
        self.data=[None]*self.capacity  #开辟存储空间5个
        self.size=0

    def resize(self,newcapacity):#对顺序表重新界定大小
        assert newcapacity>=0  # assert（断言）用于判断一个表达式，在表达式条件为 false 的时候触发异常。
        olddata=self.data
        self.capacity=newcapacity
        self.data=[None]*newcapacity #为data重新分配一个容量
        for i in range(self.size):
            self.data[i]=olddata[i]
    
    def CreateList(self,a): #初始化顺序表
        for i in range(len(a)):
            if self.size==self.capacity:#当前存储的元素等于最大容量
                self.resize(2*self.size)#开辟新的存储单元
            self.data[self.size]=a[i]
            self.size+=1
			
    def RandomCreateList(self): #初始化顺序表
        t=-10
        self.size=0
        while t<195:
            if self.size==self.capacity:#当前存储的元素等于最大容量
                self.resize(2*self.size)#开辟新的存储单元
            t=random.randint(1,200)
            self.data[self.size]=t
            self.size+=1
			

    def Add(self,e):#添加一个新元素
        if self.size==self.capacity:
            self.resize(2*self.size)
        self.data[self.size]=e
        self.size+=1

    def getsize(self):#获取元素个数
        return self.size

    def __getitem__(self,i):#获取第i个值
        assert 0<=i<self.size
        return self.data[i]

    def __setitem__(self,i,e):#为第i个元素赋新值
        assert 0<=i<self.size
        self.data[i]=e

    def Insert(self,i,e):#在第i的位置上插入新元素
        assert 0<=i<self.size
        if self.size==self.capacity:
            self.resize(2*self.size)
        for j in range(self.size,i-1,-1):
            self.data[j]=self.data[j-1]
        self.data[i]=e
        self.size+=1

    def GetNo(self,e):#返回数据e在顺序表中的序列号
        i=0
        while i<self.size and self.data[i]!=e:
            i+=1
        if i>=self.size:
            return -1
        else:
            return i

    def Delete(self,i):#删除第i个元素
        for j in range(i,self.size-1):
            self.data[j]=self.data[j+1]
        self.size-=1
        if self.capacity>self.initcapacity and self.size<=self.capacity/4:
            self.resize(self.capacity//2) #//整除

    def Display(self):#显示顺序表的所有元素
        j=0
        for i in range(self.size):
        	j+=1
        	#if j%10==0:
        		print()
        	print(self.data[i],end=' ')
            #print(self.data[i],end=' ')
        print()
	
    def Rdisplay(self): #逆序输出表
        for i in range(self.size):
            print(self.data[self.size-1-i],end=' ')
        print()
    def ElmentIncrease(self,t):#为每个元素增加5
        for i in range(self.size):
            self.data[i]+=t
		
#主程序
L=SqList()
a=[1,2,3,4] #列表 存储初始元素
L.CreateList(a)
print("新创建的表为：")
L.Display()
L.Insert(1,9)
print("在位置1插入元素9后的表为：")
L.Display()
L.Delete(0)
print("删除第0个元素后的表为：")
L.Display()
L.Add(6)
print("在表尾插入元素6后的表为:")
L.Display()
print("表的长度为：%d"%L.getsize())
print("逆顺输出表:")
L.Rdisplay()
print("正序输出顺序表")
L.Display()
print("为每个元素增加5")
L.ElmentIncrease(5)
L.Display()
#print("random:",random.randint(1,200))
print("通过随机数创建表")
L.RandomCreateList()
L.Display()



